package com.xmfh.wemedia.config;

import com.xmfh.wemedia.service.impl.DdUserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

// 表示当前配置类是配置Spring框架的
@Configuration
//// 启动Spring-Security提供的权限管理功能
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    //当前类继承WebSecurityConfigurerAdapter
    // 能够重写这个父类中的方法,这个父类中的方法都是用于设置权限管理的

    @Autowired
    private DdUserServiceImpl ddUserService;


    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(ddUserService);
    }

    /**
     * 定义无需权限就可以访问的页面、接口、资源（js\css\image）
     * 定义需要登录之后才能访问的页面、接口
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
//        http.csrf().disable()//禁用防跨域攻击功能
//                .authorizeRequests()// 设置网站的访问及放行规则
//                // 下面的方法开始指定路径
//                .antMatchers(
//                        "/**", //放行首页
//                        "/static/**"
////                        "/css/**",          //放行css资源
////                        "/js/**",           //放行js资源
////                        "/img/**",          //放行图片资源
////                        "/register.html",   //放行注册页面
////                        "/register",          //放行注册的后台接口
////                        "/login.html",      //放行登录页面
////                        "/login"            //放行登录的后台接口
//                )
//                .permitAll() // 上面的路径是全部允许的(不需要登录就能访问)
//                .anyRequest() // 除上面之外的其他路径
//                .authenticated() // 需要登录才能访问
//                .and()  //上面的配置完成了,开始配置下面的
//                .formLogin() // 使用表单进行登录
//                .loginPage("/login.html") //配置登录时显示的页面
//                .loginProcessingUrl("/login") //配置处理登录的路径
//                .failureUrl("/login.html") // 登录失败跳转的页面
//                .defaultSuccessUrl("/")// 登录成功跳转的页面
//                .and()
//                .logout()
//                .logoutUrl("/logout") // 配置登出的链接
//                .logoutSuccessUrl("/login.html");// 登出后跳转回登录页

        http.authorizeRequests().antMatchers("/**").permitAll()// 所有请求都可以访问
                .and().csrf().disable() // 跨域請求关闭
                .headers().frameOptions().disable(); // 资源下载权限关闭
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}
